// 获取网络类型
// 监听网络状态变化,可使用uni.offNetworkStatusChange取消监听。
// 这个文件里重复代码还挺多，后面再做优化处理，先只保证能正常使用即可。

// 节流
import throttle from './../../../libs/function/throttle.js'

var CALLBACK = null;// 监听网路状态变化回调
export default {
	data() {
		return {
			NetworkType:'',// 网络类型
			isConnected:false,// 当前是否有网络连接
			isCALLBACK:{},// 必须为调用uni.onNetworkStatusChange时传入的CALLBACK
			timerconn: null,//定时器
		}
	},
	created(){
		// 获取网络类型
		this.getNetworkType()
		// 监听网络状态变化（不用一进来就监听，播放出错后会监听）
		//this.getNetworkStatusChange()
	},
	// 实例销毁前
	beforeDestroy(){
		console.log('实例销毁前------------------')
		/* 3.5.1 版本新增优化 - 代码调整 - 2022-0326 */
		if (CALLBACK !== null) {
			// 1 - 取消监听网络状态变化
			uni.offNetworkStatusChange(CALLBACK)
		}
		// 销毁播放器
		this.DeletePlayer()
	},
	// 实例销毁后
	destroyed(){},
	watch:{
		// 当前是否有网络连接
		isConnected:{
			handler(newConnected,oldConnected){
				//console.log("当前网络状态 = "+newConnected)
				if (newConnected == true) {
					// 网络恢复后，恢复视频播放位置
					this.timerconn = setTimeout(() => {
						// 消除定时器
						clearTimeout(this.timerconn)
						// 恢复视频播放
						this.NetworkhuifuVideo(newConnected)
					},100)
				}else {
					// 什么也不做
				}
			},
			//immediate: true,//不用监听第一次
		},
		// 网络类型
		NetworkType:{
			handler(newNetworkType,oldNetworkType){
				if (newNetworkType == 'none') {
					// 无网络时候，需要修改404提示内容
					this.isVideoShowErrorCount.errortext = '世界上最遥远的距离就是断网'
					// 修改手动控制播放界面 提示内容
					this.isManualplay_text = '当前为无网络，请检查是否网络状态是否开启'
					// 修改视频出错后的error界面上的图片
					this.VideoShowErrorSrc = '/uni_modules/FatFatMeng-VideoPlayer/static/FatFatMeng-VideoPlayer/apps/images-icon/VideoPlayer/player_error/error-no-wifi.png'
				}else {
					// 有网络的时候，需要把404内容还原为用户设置的播放出错内容。
					// 不然下次播放出错的时候，就是上面的404内容这是不对的
					this.isVideoShowErrorCount.errortext = this.VideoErrortext
					// 修改手动控制播放界面 提示内容
					this.isManualplay_text = '当前为' + newNetworkType + '网络，请点击播放'
					// 修改视频出错后的error界面上的图片
					this.VideoShowErrorSrc = '/uni_modules/FatFatMeng-VideoPlayer/static/FatFatMeng-VideoPlayer/apps/images-icon/VideoPlayer/player_error/error-no-default.png'
				}
				if (newNetworkType == '2g' || newNetworkType == '3g' || newNetworkType == '4g' || newNetworkType == '5g'){
					// myVideoInit.js
					// 修改手动控制播放界面 提示内容
					this.isManualplay_text = '当前为移动网络，继续播放将消耗手机流量'
				}
				if (newNetworkType !== 'none'){
					// 有网路，判断视频是否出错了
					console.log('有网路，判断视频是否出错了 == ' + this.isError)
					let {errortext} = this.isVideoShowErrorCount
					if (this.isError == true){
						// 刷新视频
						console.log('视频出错了，刷新视频----------########')
						this.NetworkhuifuVideo(true)
					}
					
				}
			},
			immediate: true,
		},
		// [新版本] 2021-1220 调整后新增的
		// 监听用户设置的视频播放出错时的提示内容 
		VideoErrortext:{
			handler(newVideoErrortext,oldVideoErrortext){
				if (newVideoErrortext != '世界上最遥远的距离就是断网'){
					// 还原为用户设置的播放出错内容（也用于首次创建播放器后赋值）
					this.isVideoShowErrorCount.errortext = newVideoErrortext
				}
			}
		}
	},
	methods:{
		// 获取网络类型
		getNetworkType(){
			let _this = this
			// 有网路类型时候，如遇高频事件则直接返回
			if (this.NetworkType !== 'none' || this.NetworkType !== '') return false
			uni.getNetworkType({
				success: (res) => {
					console.log('网络类型')
					console.log(res.networkType)
					var NetTitle = res.networkType
					if (NetTitle == 'none'){
						NetTitle = '无网络' 
					}
					// uni.showToast({
					// 	title:'网络类型：'+NetTitle,
					// 	icon:'none'
					// })
					_this.NetworkType = res.networkType
				}
			})
		},
		// 监听网络状态变化
		getNetworkStatusChange(){
			var _this = this
			/* 3.5.1 版本新增优化 - 代码调整 - 2022-0326 */
			// 有网路状态时候，如遇高频事件则直接返回
			if (this.isConnected == true) return false
			// 2 - 监听网络状态变化的回调
			CALLBACK = function(res) {
				//console.log('监听网络状态变化的回调')
				console.log(res.networkType)
				console.log(res.isConnected)
				// 是否有网络?false?true
				_this.isConnected = res.isConnected
				// 网络状态：?3G4G... ?wifi ?其他 ?none无网络
				_this.NetworkType = res.networkType
				
				
				// uni.showToast({
				// 	title:'当前是否有网络连接 '+res.isConnected,
				// 	icon:'none'
				// })
				
				var NetTitle = res.networkType
				if (NetTitle == 'none'){
					NetTitle = '无网络' 
				}
				uni.showToast({
					title:'网络类型：'+NetTitle,
					icon:'none'
				})
				// 在watch里监听执行
				// 网络恢复后，恢复视频播放位置
				_this.NetworkhuifuVideo(res.isConnected)
			}
			// 1 - 执行监听网络状态变化
			uni.onNetworkStatusChange(CALLBACK)
		},
		// 恢复播放
		// 这个是视频出错后，自动刷新当前视频并播放的事件
		NetworkhuifuVideo(e){
			//console.log("当前网络状态 = "+e)
			if (e == true) {
				// 如果网络状态恢复为true,则自动恢复播放
				
				
				/* 3.5.1 版本新增优化 */
				// 判断是否是直播
				if (this.islive_player==true){
					uni.showToast({
						title:'正在刷新直播',
						icon:'none'
					})
					// 隐藏loading和Error面板
					this.onHiedloadingError()
					// 是直播 刷新播放
					this.restartPlay()
					
					/* 3.5.1 版本新增优化 - 代码调整 - 2022-0326 */
					// 1 - 取消监听网络状态变化
					uni.offNetworkStatusChange(CALLBACK)
				}else {
					// 这里需要延时异步一下，不然不会播放第一个视频(当进入页面第一个视频直接没有网络，然后打开了网络，点击刷新，没有反应，是因为没有加延时，需要缓一缓)
					let VideoIndex = this.VideoSrcIndex
					uni.showToast({
						title:'正在恢复第 '+ Number(VideoIndex+1) +'个视频',
						icon:'none'
					})
					// 获取视频进度，并跳转到指定视频进度，用于恢复播放
					let currTime = this.timeUpdate[0].dwhfcurrTime
					/* 2021-1020-调整代码逻辑，采用Promise */
					// 设置视频自动播放(不设置的话，默认不自动播放)
					this.video_autoplay = true
					
					/* 3.5.1 版本新增优化
					 * 修复 - 断网时间小于0或等于0时，seek不生效，导致无法自动恢复播放的问题
					 */
					// 判断断网时间是否<=0或undefined，是则调用重新播放，因为此时如果调用seek(0)是不会生效的
					if (currTime <= 0 || currTime == undefined) {
						console.log('当前断网时间小于0或等于0，seek不生效，此时则直接调用restartPlay重新播放')
						// 重新播放
						this.restartPlay()
					} else {
						// 不是直播 设置播放
						this.play()
						// 跳转到指定视频进度，用于恢复播放
						this.SetVideoSeek(currTime).then(res=>{
							uni.showToast({
								title:'续播时间为 '+currTime,
								icon:'none'
							})
							/* 3.5.1 版本新增优化 - 代码调整 - 2022-0326 */
							// 1 - 取消监听网络状态变化
							uni.offNetworkStatusChange(CALLBACK)
							// var CALLBACK = function(res) {
							// 	// ...取消监听网络状态变化成功
							// }
							// uni.offNetworkStatusChange(CALLBACK)
						}).catch(err=>{
							//还不可以设置视频进度，因为视频还没进入播放状态
							//此时Promise里，已经自动重新执行此事件，直到成功为止
						})
					}
				}
			}
		}
	}
}